home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / FROMUTS / UNIXLIB37B / src / sys / s / _exec < prev    next >
Text File  |  1992-03-16  |  3KB  |  176 lines

  1. ;    /* _exec.s (c) Copyright 1990 H.Rogers */
  2.  
  3. a1 RN 0
  4. a2 RN 1
  5. a3 RN 2
  6. a4 RN 3
  7. v1 RN 4
  8. v2 RN 5
  9. v3 RN 6
  10. v4 RN 7
  11. v5 RN 8
  12. v6 RN 9
  13. sl RN 10
  14. fp RN 11
  15. ip RN 12
  16. sp RN 13
  17. lr RN 14
  18. pc RN 15
  19.  
  20.     AREA    |C$$code|,CODE,READONLY
  21.  
  22.     IMPORT    |__exret|
  23.  
  24.     IMPORT    |__base|
  25.     IMPORT    |__break|
  26.  
  27.     IMPORT    |__exerr|
  28.  
  29. |__exec_s0|
  30.  
  31. |__exec_s1|
  32.     MOV    v1,a1
  33.     ADR    a1,|__exreg|
  34.     STMIA    a1,{sl,fp,sp}
  35.  
  36.     MOV    a1,#11
  37.     ADR    a2,|__exec_s4|
  38.     MOV    a3,#0
  39.     MOV    a4,#0
  40.     SWI    &20040
  41.     STR    a2,[pc,#|__o_exit|-.-8]
  42.  
  43.     LDR    a1,[pc,#|__base_ptr|-.-8]
  44.     LDR    a1,[a1,#0]
  45.     STR    a1,[pc,#|__base_|-.-8]
  46.     LDR    a2,[pc,#|__break_ptr|-.-8]
  47.     LDR    a2,[a2,#0]
  48.     STR    a2,[pc,#|__break_|-.-8]
  49.     LDR    a3,[pc,#|__exshift|-.-8]
  50.     CMP    a3,#0
  51.     BEQ    |__exec_s3|
  52.  
  53.     ADD    a3,a2,a3
  54.  
  55.     SUB    a1,a2,a1
  56.     ANDS    a4,a1,#31
  57.     BEQ    |__exec_s2_1|
  58. |__exec_s2_0|
  59.     LDR    ip,[a2,#-4]!
  60.     STR    ip,[a3,#-4]!
  61.     SUB    a1,a1,#4
  62.     ANDS    a4,a1,#31
  63.     BNE    |__exec_s2_0|
  64. |__exec_s2_1|
  65.     CMP    a1,#0
  66.     BEQ    |__exec_s3|
  67. |__exec_s2_2|
  68.     LDMDB    a2!,{a4,v2,v3,v4,v5,v6,sl,ip}
  69.     STMDB    a3!,{a4,v2,v3,v4,v5,v6,sl,ip}
  70.     SUBS    a1,a1,#64
  71.     LDMGEDB a2!,{a4,v2,v3,v4,v5,v6,sl,ip}
  72.     STMGEDB a3!,{a4,v2,v3,v4,v5,v6,sl,ip}
  73.     BGT    |__exec_s2_2|
  74.  
  75. |__exec_s3|
  76.     MOV    a1,#0
  77.     MOV    a2,a3
  78.     MOV    a3,#0
  79.     MOV    a4,#0
  80.     SWI    &20040
  81.     STR    a2,[pc,#|__o_himem|-.-8]
  82.  
  83.     MOV    a1,v1
  84.     SWI    &20005
  85.     MOVVC    a1,#0
  86.     STR    a1,[pc,#|__exerr_|-.-8]
  87.  
  88. |__exec_s4|
  89.     MOV    a1,#0
  90.     LDR    a2,[pc,#|__o_himem|-.-8]
  91.     MOV    a3,#0
  92.     MOV    a4,#0
  93.     SWI    &20040
  94.  
  95.     LDR    a3,[pc,#|__base_|-.-8]
  96.     LDR    a1,[pc,#|__break_|-.-8]
  97.     LDR    a2,[pc,#|__exshift|-.-8]
  98.     CMP    a2,#0
  99.     BEQ    |__exec_s6|
  100.  
  101.     ADD    a1,a1,a2
  102.     ADD    a2,a3,a2
  103.  
  104.     SUB    a1,a1,a2
  105.     ANDS    a4,a1,#31
  106.     BEQ    |__exec_s5_1|
  107. |__exec_s5_0|
  108.     LDR    ip,[a2],#4
  109.     STR    ip,[a3],#4
  110.     SUB    a1,a1,#4
  111.     ANDS    a4,a1,#31
  112.     BNE    |__exec_s5_0|
  113. |__exec_s5_1|
  114.     CMP    a1,#0
  115.     BEQ    |__exec_s6|
  116. |__exec_s5_2|
  117.     LDMIA    a2!,{a4,v2,v3,v4,v5,v6,sl,ip}
  118.     STMIA    a3!,{a4,v2,v3,v4,v5,v6,sl,ip}
  119.     SUBS    a1,a1,#64
  120.     LDMGEIA a2!,{a4,v2,v3,v4,v5,v6,sl,ip}
  121.     STMGEIA a3!,{a4,v2,v3,v4,v5,v6,sl,ip}
  122.     BGT    |__exec_s5_2|
  123.  
  124. |__exec_s6|
  125.     MOV    a1,#11
  126.     LDR    a2,[pc,#|__o_exit|-.-8]
  127.     MOV    a3,#0
  128.     MOV    a4,#0
  129.     SWI    &20040
  130.  
  131.     LDR    a1,[pc,#|__exerr_ptr|-.-8]
  132.     LDR    a2,[pc,#|__exerr_|-.-8]
  133.     STR    a2,[a1,#0]
  134.  
  135.     ADR    a1,|__exreg|
  136.     LDMIA    a1,{sl,fp,sp}
  137.  
  138.     LDR    a1,[pc,#|__exret_ptr|-.-8]
  139.     MOV    pc,a1
  140.  
  141. |__o_exit|
  142.     DCD    0    ; old Exit Handler
  143. |__o_himem|
  144.     DCD    0    ; old HIMEM
  145. |__exret_ptr|
  146.     DCD    |__exret|
  147. |__base_ptr|
  148.     DCD    |__base|
  149. |__base_|
  150.     DCD    0    ; __base value
  151. |__break_ptr|
  152.     DCD    |__break|
  153. |__break_|
  154.     DCD    0    ; __break value
  155. |__exreg|
  156.     %    12    ; sl,fp,sp
  157. |__exerr_ptr|
  158.     DCD    |__exerr|
  159. |__exerr_|
  160.     DCD    0
  161.  
  162.     EXPORT    |__exshift|
  163. |__exshift|
  164.     DCD    0
  165.  
  166. |__exec_s7|
  167.  
  168.     EXPORT    |__exptr|
  169. |__exptr|
  170.     DCD    |__exec_s0|
  171.     EXPORT    |__exlen|
  172. |__exlen|
  173.     DCD    |__exec_s7|-|__exec_s0|
  174.  
  175.     END
  176.